import java.util.Arrays;
import java.util.HashSet;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: syyyy
 * Date: 2025-10-28
 * Time: 18:13
 */
public class Test {
    /*    nums[0]  nums[1]  nums[2]  nums[3]
   ans[0]=  1        2        3        4

   ans[1]=  1        1        3        4

   ans[2]=  1        2        1        4

   ans[3]=  1        2        3        1

   从这里我们可以看出对应位置的那个数都是1，刚好就在对角线处，把正方形刚好分成了两个部分，有上三角和下三角
     */
    public static int[] productExceptSelf(int[] nums){
        int len= nums.length;
        int[] ans=new int[len];
        ans[0]=1;
        int tmp=1;
        for (int i = 1; i < len; i++) {//先算下三角
            ans[i]=ans[i-1]*nums[i-1];//解析这个ans[i-1]和nums[i-1],前者就像1，12，123每次每组的数字相乘，就例如123，1*2其实就是12的积，然后再拿12的积乘3
                                      //那为什么nums[i-1]要这样写，因为题目的意思就是不要当前i那一位，其他位全部相乘，刚好我们在求对角线的左下部分，那就要i-1啦
        }
        for (int i = len-2; i >= 0 ; i--) {//再算上三角
            //这里为什么是len-2，因为最后一行(len-1)在求下三角的时候乘积已经被求出来了，所以我们直接来到len-2那一行
            tmp=tmp*nums[i+1];
            ans[i]*=tmp;//这里tmp的用处跟ans[0]的用处一样
        }
        return ans;
    }

    public static int lengthOfLongestSubstring(String s){
        int count=0;
        int tmp=0;
        HashSet<Character> hashSet=new HashSet<>();
        for (int i = 0; i < s.length(); i++) {
            char ch=s.charAt(i);
            if(!hashSet.contains(ch)){
                hashSet.add(ch);
                count++;
                continue;
            }
            hashSet.clear();
            hashSet.add(ch);
            if(count > tmp){
                tmp=count;
            }
            count=1;
        }
        return tmp;
    }
    public static void main(String[] args) {
//        int[] nums={1,2,3,4};
//        int[] ret=productExceptSelf(nums);
//        System.out.println(Arrays.toString(ret));
        int ret=lengthOfLongestSubstring("abcabcabb");
        System.out.println(ret);
    }
}
